//
//  HMEmoticonManager.swift
//  EmoticonKeyboard
//
//  Created by 周英培 on 16/5/31.
//  Copyright © 2016年 周英培. All rights reserved.

//  表情数据管理类  管理所有的模型 总类  管理分组表情模型->一组表情模型->表情模型
/*
 1.首先加载emoticons.plist文件 获取分组模型的数据
 2.根据分组模型文件夹加载分组文件夹里面的info.plist文件 获取组表情模型数据
 3.根据每组info.plist文件里面的emoticons这个key值来获取对应的所有的表情
 4.将每组的模型数据按页分成几组 即组模型数据分成二维数组
 */

import UIKit

class HMEmoticonManager: NSObject {

    //设置单例 解决不重复加载 一次加载之后 以后的加载从内存中加载  减少内存的消耗 并且减轻对磁盘的伤害
    static let sharedEmoticonTools : HMEmoticonManager = HMEmoticonManager()
    
    //组模型属性数组
    lazy var packages : [HMEmoticonPackage] = [HMEmoticonPackage]()
    
    //重写构造方法 在构造方法中给 packages赋值
   private override init() {
        super.init()
        
        //加载组数据
        loadEmoticons()
    }
    
    //MARK:加载总模型
    func loadEmoticons() {
    
        //加载emoticons.plist文件
        let path = NSBundle.mainBundle().pathForResource("emoticons.plist", ofType: nil, inDirectory: "Emoticons.bundle")!
        
        //这个文件根是字典 用字典来接受里面的数据
        let dict = NSDictionary(contentsOfFile: path) as! [String : AnyObject]
        
        //emoticons.plist文件里面有个packageskey值 根据这个来获取三个分组的数据
        let array = dict["packages"] as! [[String : AnyObject]]
        
        //遍历分组数据 获取每个组的数据
        for item in array {
            //根据id 这个key值来获取每组的文件目录
            let id = item["id"] as! String
            
            //根据每个组的目录加载每组的表情数据
            loadPackages(id)
            
        }
        
    }
    
    //MARK:加载分组表情数据  根据每个组的目录
    func loadPackages(id : String) {
    
        //根据id拼接文件路径 加载每组的info.plist 文件
        let path = NSBundle.mainBundle().pathForResource("info.plist", ofType: nil, inDirectory: "Emoticons.bundle/"+id)!
        
        //获取数据
        let dict = NSDictionary(contentsOfFile: path)   //这个地方为什么不像上面那样强制转成字典呢
        
        //根据group_name_cn这个key值获取分组的中文名称
        //给分组模型对象的title赋值
        let group_name_cn = dict!["group_name_cn"] as! String
        
        //根据emoticons这个key值 来获取每组的表情数据
        let array = dict!["emoticons"] as! [[String : String]]
        
        //获取组的表情数据
        let p = HMEmoticonPackage(id : id,title: group_name_cn, array: array)
        
        //添加到组模型数组里面
        packages.append(p)
        
        
    }
    
}
